﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using System.Collections;

namespace LCWMS
{
    public partial class  w_so072 : DockContent
    {
        DataSet dscustomer;
        DataSet ds_tran;
        Cursor currentCursor = Cursor.Current;

        public w_so072()
        {
            InitializeComponent();
            dgv_tran.AutoGenerateColumns = false;
        }



        //添加采购定单的合计行
        private void f_add_order()
        {
            //decimal d_1, d_2, d_3, d_4, d_5, d_6, d_7;
            //DataTable dt_put;
            ////增加一个合计行 
            //dt_put = (DataTable)dgv_tran.DataSource;
            //d_1 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["bill_num"].ColumnName + ")", "true");
            //d_2 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["shop_num"].ColumnName + ")", "true");
            //d_3 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["total_pickamount"].ColumnName + ")", "true");
            //DataRow dr = dt_put.NewRow();
            //dr["barcode"] = "合计";
            //dr["bill_num"] = d_1;
            //dr["shop_num"] = d_2;
            //dr["total_pickamount"] = d_3;
            //((DataTable)dgv_tran.DataSource).Rows.InsertAt(dr, ((DataTable)dgv_tran.DataSource).Rows.Count);
        }


        private void btn_Query_Click(object sender, EventArgs e)
        {
            

            lb_rows.Text = "总行数：0";

            // 设置为忙碌状态
            Cursor.Current = Cursors.WaitCursor;

            string str_sql =
" select " +
" RTRIM(a.gdsincode) sku , " +                      // -- 商品编码
" ms.sku_name, " +                                  // -- 商品名称
" RTRIM(ms.barcode) barcode," +                     // -- 主条码
" RTRIM(msbg.barcode_group) barcode_group," +       // -- 多条码
" ms.main_unit," +                                  // -- 单位
" mp.qty02 box_spec ," +                            // -- 整件规格(箱规)
" mp.unitsPerDelivery," +                           // -- 配送规格
" ms.shelflife_day, " +                             // -- 保质天数
" RTRIM(ms.class_code3) class_code3, " +            // -- 类别编码
" RTRIM(sc3.class_name) class_name3," +             // -- 类别名称
" RTRIM(mw.warehouse) warehouse, " +                // -- 库区编码 
" RTRIM(mw.warehouse_name) warehouse_name, " +      // -- 库区名称
" RTRIM(a.positioncode) positioncode ," +                                // -- 货位
//" RTRIM(b.picker) picker," +                                      // -- 拣货人
" count(distinct a.applybillno) bill_num," +        // -- 拣货频率（指要货单数量）
" count(distinct a.shopcode) shop_num, " +          // -- 出货门店数（指要货门店的数量）
//" sum(pickamount) total_pickamount" +               // -- 配送数量(有问题，不应该用pickamount)
" ISNULL(CAST(sum(dpwg.realPickQty) AS decimal(16,3)), 0) total_pickamount" +               // -- 配送数量
" FROM wms.dps_pick_apply a " +         
" left join wms.dps_pick_bill b on a.pickbillno=b.billno" + //
" left join wms.mst_sku ms ON ms.inv_org='" + main.g_org + "' AND ms.consignor='" + cb_consignor.Text.Trim() + "' AND  a.gdsincode = ms.sku " + //
" LEFT JOIN wms.mst_pack mp ON mp.inv_org = ms.inv_org AND mp.consignor = ms.consignor  AND mp.sku = ms.sku  AND mp.pack_code = ms.pack_code " + //
" LEFT JOIN WMS.mst_stat_class sc3 ON ms.inv_org = sc3.inv_org AND sc3.class_flag = 'C3' AND ms.class_code3 = sc3.class_code  " + //
" left join wms.mst_location ml on ml.inv_org = ms.inv_org and ml.location_code = ms.fix_location " + //
" left join wms.mst_area ma on ml.inv_org = ma.inv_org and ml.area_code = ma.area_code " + //
" left join wms.mst_warehouse mw on ma.inv_org = mw.inv_org and ma.warehouse = mw.warehouse " + //
" LEFT JOIN wms.dps_pick_wms_goods dpwg ON a.pickbillno = dpwg.orderId  and a.gdsincode = dpwg.articleId " +
" left join (  SELECT  sku , barcode_group = ( STUFF(( SELECT    ',' + barcode FROM      wms.mst_sku_barcode WHERE     sku = Test.sku " + //
" FOR XML PATH('')  ), 1, 1, '') ) FROM    wms.mst_sku_barcode AS Test GROUP BY sku  ) as msbg on a.gdsincode = msbg.sku " + //
" where 1=1 ";


                       // " WHERE  a.inv_org ='" + main.g_org + "' and (a.so_type='0' or a.so_type='3')"; // so_type 0-出库 1-退货 3-调拨出库

            string str_sql_where = "";
            //if (cb_consignor.Text.Trim() != "")
            //{
            //    str_sql_where = " and a.consignor = '" + cb_consignor.Text.Trim() + "'";
            //}

            if (dtp_h_time.Text.Trim() != "")
            {

                str_sql = str_sql + " and a.accDate between '" + dtp_h_time.Text.ToString().Trim().Replace(".", "") + "' and '" + dtp_h_endtime.Text.ToString().Trim().Replace(".", "") + "'";
            }


            //判断门店号
            //if (tb_customer_code.Text.Trim() != "")
            //{
            //    string[] custList = tb_customer_code.Text.Trim().Split(',');
            //    string custWhere = "";
            //    if (custList.Length > 0) {
            //        foreach (string item in custList) {
            //            if (custWhere == "")
            //            {
            //                custWhere = "'" + item + "'";
            //            }
            //            else {
            //                custWhere += ",'" + item + "'";
            //            }
            //        }
            //        str_sql = str_sql + " and a.customer_code in (" + custWhere + ")";
            //    }
            //}

            // 库区
            if (tb_warehouse.Text.Trim() != "")
            {

                str_sql = str_sql + " and mw.warehouse = '" + tb_warehouse.Text.Trim() + "'";
            }

            //判断商品码
            if (tb_sku.Text.Trim() != "")
            {
                string[] skuList = tb_sku.Text.Trim().Split(',');
                string skuWhere = "";
                if (skuList.Length > 0)
                {
                    foreach (string item in skuList)
                    {
                        if (skuWhere == "")
                        {
                            skuWhere = "'" + item + "'";
                        }
                        else
                        {
                            skuWhere += ",'" + item + "'";
                        }
                    }
                    str_sql = str_sql + " and ms.sku in (" + skuWhere + ")";
                }

                //str_sql = str_sql + " and b.sku = '" + tb_sku.Text.Trim() + "'";
            }

            // 商品名称
            if (tb_sku_name.Text.Trim() != "")
            {

                str_sql = str_sql + " and ms.sku_name = '" + tb_sku_name.Text.Trim() + "'";
            }

            // 主条码
            if (tb_barcode.Text.Trim() != "")
            {

                str_sql = str_sql + " and ms.barcode = '" + tb_barcode.Text.Trim() + "'";
            }

            // 货位
            if (tb_location_code.Text.Trim() != ""){

                str_sql = str_sql + " and a.positioncode = '" + tb_location_code.Text.Trim() + "'";
            }

            


            str_sql += " GROUP BY a.gdsincode,ms.sku_name,ms.barcode,msbg.barcode_group,  ms.main_unit,  mp.qty02, mp.unitsPerDelivery,  ms.shelflife_day,  ms.class_code3,  sc3.class_name,mw.warehouse , mw.warehouse_name,  a.positioncode ";
            str_sql += " order by a.gdsincode  ";
            try
            {
                if (main.dbtype == "SQL")
                {
                    ds_tran = main.dbservice.Sql_exec_selectsql(str_sql);
                }
                else
                {
                    ds_tran = main.dbservice.oracle_exec_selectsql(str_sql);
                }
                if (ds_tran.Tables[0].Rows.Count > 0)
                {
                    lb_rows.Text = "总行数：" + ds_tran.Tables[0].Rows.Count.ToString();
                    dgv_tran.DataSource = ds_tran.Tables[0];
                    f_add_order();
                }
                else
                    dgv_tran.DataSource = null;
            }
            catch (System.Exception ee)
            {
                dgv_tran.DataSource = null;
                MessageBox.Show(main.g_class.comm_getchangestring("Fail to Query", main.g_info_dataset) + "!" + ee.ToString());
            }
            Cursor.Current = currentCursor;
        }

        private void w_so072_Load(object sender, EventArgs e)
        {
            
            dscustomer = new DataSet();
            
          
            try
            {
                dscustomer = new DataSet();
                dscustomer = main.g_class.comm_get_consignor();
                cb_consignor.DataSource = dscustomer.Tables[0];
                cb_consignor.ValueMember = "consignor";
                cb_consignor.DisplayMember = "consignor";

                //语言转换
                main.g_class.comm_changeControl(this, main.g_win_dataset);
            }
            catch (System.Exception ee)
            {
                MessageBox.Show(main.g_class.comm_getchangestring("Fail to initialize Information of transaction type", main.g_info_dataset) + "!" + ee.ToString());
                return;
            }

            dtp_h_time.CustomFormat = "yyyy.MM.dd"; // "yyyy.MM.dd"
            dtp_h_time.Format = DateTimePickerFormat.Custom;
            dtp_h_time.Value = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy.MM.dd").Trim());
            dtp_h_endtime.CustomFormat = "yyyy.MM.dd";
            dtp_h_endtime.Format = DateTimePickerFormat.Custom;
            dtp_h_endtime.Value = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy.MM.dd").Trim());


            //按钮权限控制
            string str_right;
            str_right = main.g_class.comm_getright("w_so072", main.g_right_dataset);


            //查询
            if (str_right.Substring(4, 1) == "0")
            {
                this.btn_Query.Visible = false;
            }

            else
            {
                this.btn_Query.Visible = true;
            }

            //导出ＥＸＣＥＬ
            if (str_right.Substring(5, 1) == "0")
            {
                this.btn_excel.Visible = false;
            }
            else
            {
                this.btn_excel.Visible = true;
            }
           
           
        }

        private void dgv_tran_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void lb_batchno_Click(object sender, EventArgs e)
        {

        }

        private void dgv_tran_CellClick(object sender, DataGridViewCellEventArgs e)
        {
           // i_trans_header = e.ColumnIndex;

        }

        private void dgv_tran_Sorted(object sender, EventArgs e)
        {
            //string str_headertext;
            ////先删除合计行
            //((DataTable)dgv_tran.DataSource).Rows.Remove(((DataTable)dgv_tran.DataSource).Select("pack_code = '合计'")[0]);
            ////然后对Tables[0]重新排序
            //DataTable dt;
            //DataView dv = ((DataTable)dgv_tran.DataSource).DefaultView;
            ////得到点击的列
            //str_headertext = dgv_tran.Columns[i_trans_header].DataPropertyName.ToString().Trim();
            //if (b_trans_sort) //升序
            //{
            //    dv.Sort = str_headertext + " DESC";
            //    b_trans_sort = false;
            //}
            //else
            //{
            //    dv.Sort = str_headertext;
            //    b_trans_sort = true;
            //}
            //dt = dv.ToTable();
            //dgv_tran.DataSource = null;
            //dgv_tran.DataSource = dt;
            ////增加合计行
            //f_add_transf();
        }

        private void cb_consignor_TextChanged(object sender, EventArgs e)
        {
            string str_cust;
            str_cust = cb_consignor.Text.Trim();
            tb_cusname.Text = main.g_class.comm_findname(str_cust, dscustomer);
        }

        private void dgv_tran_DoubleClick(object sender, EventArgs e)
        {
             
        }
        private void btn_excel_Click(object sender, EventArgs e)
        {
            if (dgv_tran.Rows.Count > 0)
            {
                main.g_class.DataGridViewToExcel(dgv_tran);
            }
        }


        //复制某一列值到剪贴板
        private void CopyColumnValueToClipboard(DataGridView dgv, int rowIndex, int columnIndex)
        {
            if (dgv.Rows.Count <= rowIndex || columnIndex < 0)
            {
                // 检查索引是否超出范围
                return;
            }

            string value = dgv.Rows[rowIndex].Cells[columnIndex].Value.ToString();
            if (value != null)
            {
                Clipboard.SetText(value);


                MessageBox.Show("已复制到剪贴板");
            }
        }

        private void dgv_tran_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int i_temp = dgv_tran.CurrentRow.Index;
            string str_name = dgv_tran.Columns[dgv_tran.CurrentCell.ColumnIndex].Name.ToString().Trim();
            //if (str_name == "so_no")
            //{

                //如果你想复制第二行第三列的值：
            CopyColumnValueToClipboard(dgv_tran, i_temp, dgv_tran.CurrentCell.ColumnIndex);
            //}
        }

        private void btn_q_customer_code_Click(object sender, EventArgs e)
        {
            w_query_batch wsingle = new w_query_batch();
            wsingle.ShowDialog();
            this.tb_warehouse.Text = w_query_batch.str_qcontent;
        }

        private void btn_q_sku_Click(object sender, EventArgs e)
        {
            w_query_batch wsingle = new w_query_batch();
            wsingle.ShowDialog();
            this.tb_sku.Text = w_query_batch.str_qcontent;
        }

        private void dgv_tran_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            //自动编号，与数据无关
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
               e.RowBounds.Location.Y,
               dgv_tran.RowHeadersWidth - 4,
               e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics,
                  (e.RowIndex + 1).ToString(),
                   dgv_tran.RowHeadersDefaultCellStyle.Font,
                   rectangle,
                   dgv_tran.RowHeadersDefaultCellStyle.ForeColor,
                   TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }

        // 删除行
        private void dgv_tran_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                ContextMenu m = new ContextMenu(); // 创建一个 ContextMenu
                MenuItem deleteRowItem = new MenuItem("删除行"); // 创建一个 MenuItem
                deleteRowItem.Click += dgv_tran_DeleteRowItem_Click; // 添加点击事件
                m.MenuItems.Add(deleteRowItem);

                int currentMouseOverRow = dgv_tran.HitTest(e.X, e.Y).RowIndex;   // 将 MenuItem 添加到 ContextMenu
                m.Show(dgv_tran, new Point(e.X, e.Y));                           // 显示 ContextMenu
            }
        }

        private void dgv_tran_DeleteRowItem_Click(object sender, EventArgs e)
        {

            w_dgv_deleterow wsingle = new w_dgv_deleterow();
            wsingle.ShowDialog();
            int i_row_start = w_dgv_deleterow.i_row_start - 1;
            int i_row_end = w_dgv_deleterow.i_row_end - 1;

            // 确保起始行和结束行在有效范围内
            if (i_row_start < 0) return;
            if (i_row_end >= dgv_tran.Rows.Count || i_row_start > i_row_end)
            {
                MessageBox.Show("超出有效范围！");
                return;
            }

            // 从 DataGridView 中删除指定范围的行 (从后向前删除行，避免索引变化问题)
            for (int i = i_row_end; i >= i_row_start; i--)
            {
                dgv_tran.Rows.RemoveAt(i);
            }

        }
    }
}